package v1

import (
	"fmt"
	"github.com/gin-gonic/gin"
	"github.com/spf13/cast"
	"hr/api/dto"
	"hr/api/middleware"
	"hr/db"
	"hr/pkg"
	"hr/utils"
)

// GetUserQrcode
// @Summary 生成用户二维码
// @Tags 邀请相关api
// @Accept  json
// @Produce json
// @Param Access-Token header string true "Authentication header"
// @Success 200 {object} utils.JsonContent
// @Failure 400 {object} utils.JsonContent
// @Failure 500 {object} utils.JsonContent
// @Router /api/v1/auth/invite/qrcode [get]
func GetUserQrcode(c *gin.Context)  {
	id, _ := middleware.GetCurrentUserId(c)
	fmt.Println(id)
	d, err := pkg.GeneraQrcode(cast.ToString(id), utils.GetUUID())
	if err != nil {
		utils.EchoError(c, err.Error())
		return
	}
	utils.EchoSuccess(c, d, "请求成功")
	return
}

// GetInviteManage
// @Summary 获取邀请记录
// @Tags 邀请相关api
// @Accept  json
// @Produce json
// @Param Access-Token header string true "Authentication header"
// @Param pageNo query string true "页码"
// @Param pageSize query string true "页大小"
// @Success 200 {object} utils.JsonContent
// @Failure 400 {object} utils.JsonContent
// @Failure 500 {object} utils.JsonContent
// @Router /api/v1/auth/invite/paging [get]
func GetInviteManage(c *gin.Context)  {
	pageNoStr := c.Query("pageNo")
	pageSizeStr := c.Query("pageSize")

	var pageNo,pageSize int
	if !utils.IsStringEmpty(pageNoStr) {
		pageNo = cast.ToInt(pageNoStr)
	}
	if !utils.IsStringEmpty(pageSizeStr) {
		pageSize = cast.ToInt(pageSizeStr)
	}
	paging := &dto.Pagination{
		PageNo:  pageNo,
		PageSize: pageSize,
	}
	d, err := db.GetInviteManagePaging(*paging)
	if err != nil {
		utils.EchoError(c, err.Error())
		return
	}
	utils.EchoSuccess(c, d, "请求成功")
	return
}

// GetUserInviteManage
// @Summary 获取用户邀请记录
// @Tags 邀请相关api
// @Accept  json
// @Produce json
// @Param Access-Token header string true "Authentication header"
// @Param pageNo query string true "页码"
// @Param pageSize query string true "页大小"
// @Param userId query string false "用户id"
// @Success 200 {object} utils.JsonContent
// @Failure 400 {object} utils.JsonContent
// @Failure 500 {object} utils.JsonContent
// @Router /api/v1/auth/invite/user [get]
func GetUserInviteManage(c *gin.Context)  {
	pageNoStr := c.Query("pageNo")
	pageSizeStr := c.Query("pageSize")
	userIdSizeStr := c.Query("userId")

	var pageNo,pageSize int
	if !utils.IsStringEmpty(pageNoStr) {
		pageNo = cast.ToInt(pageNoStr)
	}
	if !utils.IsStringEmpty(pageSizeStr) {
		pageSize = cast.ToInt(pageSizeStr)
	}
	paging := &dto.Pagination{
		PageNo:  pageNo,
		PageSize: pageSize,
	}
	var paramsId string
	id, _ := middleware.GetCurrentUserId(c)
	if utils.IsStringEmpty(userIdSizeStr) {
		paramsId = cast.ToString(id)
	} else {
		paramsId = userIdSizeStr
	}
	d, err := db.GetMyInviteManagePaging(*paging, paramsId)
	if err != nil {
		utils.EchoError(c, err.Error())
		return
	}
	utils.EchoSuccess(c, d, "请求成功")
	return
}

// CreateInviteManage
// @Summary 创建邀请
// @Tags 邀请相关api
// @Accept  json
// @Produce json
// @Param Access-Token header string true "Authentication header"
// @Param InviteRequest body dto.InviteRequest true "信息"
// @Success 200 {object} utils.JsonContent
// @Failure 400 {object} utils.JsonContent
// @Failure 500 {object} utils.JsonContent
// @Router /api/v1/auth/invite [post]
func CreateInviteManage(c *gin.Context)  {
	p := &dto.InviteRequest{}
	if err := c.ShouldBindJSON(p); err != nil {
		utils.EchoError(c,"缺少必要参数信息")
		return
	}
	m, err := db.CreateInviteManage(*p)
	if err != nil {
		utils.EchoError(c, err.Error())
		return
	}

	utils.EchoSuccess(c, m, "创建成功")
	return
}

// UpdateInviteManage
// @Summary 更新邀请
// @Tags 邀请相关api
// @Accept  json
// @Produce json
// @Param Access-Token header string true "Authentication header"
// @Param id path string true "邀请人ID"
// @Param status path string true "状态" 1邀约面试 2同意入职 3拒绝入职
// @Success 200 {object} utils.JsonContent
// @Failure 400 {object} utils.JsonContent
// @Failure 500 {object} utils.JsonContent
// @Router /api/v1/auth/invite/{id}/{status} [put]
func UpdateInviteManage(c *gin.Context)  {
	idStr := c.Param("id")
	if utils.IsStringEmpty(idStr) {
		utils.EchoError(c,"缺少邀请人ID")
		return
	}
	status := c.Param("status")
	if utils.IsStringEmpty(idStr) {
		utils.EchoError(c,"缺少状态")
		return
	}
	_, _ ,tag := db.GetInviteManage(map[string]interface{}{"id": idStr})
	if tag == "0" || tag == "1" {
		utils.EchoError(c,"此邀请记录不存在")
		return
	}
	m, err := db.UpdateInviteManage(idStr, status)
	if err != nil {
		utils.EchoError(c, err.Error())
		return
	}

	utils.EchoSuccess(c, m, "更新成功")
	return
}